package com.reactim.message.connection;

import lombok.Builder;
import lombok.Data;

import java.time.Instant;

/**
 * 故障恢复统计信息
 */
@Data
@Builder
public class FaultRecoveryStats {
    
    /**
     * Redis是否健康
     */
    private final boolean redisHealthy;
    
    /**
     * 连续失败次数
     */
    private final int consecutiveFailures;
    
    /**
     * 最后健康检查时间
     */
    private final Instant lastHealthCheckTime;
    
    /**
     * 最后故障时间
     */
    private final Instant lastFailureTime;
    
    /**
     * 最后恢复时间
     */
    private final Instant lastRecoveryTime;
    
    /**
     * 故障转移连接数
     */
    private final int failoverConnectionCount;
    
    /**
     * 故障转移在线用户数
     */
    private final int failoverOnlineUserCount;
    
    /**
     * 总故障次数
     */
    private final long totalFailures;
    
    /**
     * 总恢复次数
     */
    private final long totalRecoveries;
    
    /**
     * 平均故障持续时间（秒）
     */
    private final long averageFailureDurationSeconds;
    
    /**
     * 获取可用性百分比
     */
    public double getAvailabilityPercentage() {
        if (totalFailures == 0) {
            return 100.0;
        }
        return (double) totalRecoveries / totalFailures * 100.0;
    }
    
    /**
     * 是否处于故障转移模式
     */
    public boolean isInFailoverMode() {
        return !redisHealthy && failoverConnectionCount > 0;
    }
    
    /**
     * 获取故障转移使用率
     */
    public double getFailoverUsageRate() {
        if (failoverConnectionCount == 0) {
            return 0.0;
        }
        // 这里可以根据实际需求计算使用率
        return Math.min(100.0, (double) failoverConnectionCount / 1000 * 100);
    }
}